package demo1;


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

//此时，该类被称为窗体类
//1，定义组件
//2，初始化组件
//3，使用网络编程完成数据传输（tcp、udp）
//4,发送按钮的监听点击事件
//
//在这个界面上，添加修改xml文件的内容，通过输入东西到对话框，然后进行修改

//在这个上面，添加
public class Student2 extends JFrame implements ActionListener{

    public static void main(String[] args){
        new Student2();
    }

    // 说明：一个类需要页面的显示，则那个类要继承JFrame。
    // 属性
    // 文本域
    private JTextArea jta;
    // 滚动条
    private JScrollPane jsp;
    // 面板里面是文本框和按钮
    private JPanel jp;
    private JTextField jtf;
    private JButton jb;
    //输出流
    private BufferedWriter bw  = null;

    // 构造器
    public Student2(){

        // 初始化上面的属性
        jta = new JTextArea();
        //设置文本域不可编辑
        jta.setEditable(false);
        // 将文本域添加到滚动条中
        jsp = new JScrollPane(jta);
        jp = new JPanel();
        jtf =new JTextField(15);
        jb = new JButton("发送");

        // 把按钮和文本框添加到面板中
        jp.add(jtf);
        jp.add(jb);
        // 把滚动条和面板添加到JFrame中去
        this.add(jsp,BorderLayout.CENTER); //这个设置在中间
        this.add(jp,BorderLayout.SOUTH); //南

        this.setTitle("同学2");
        this.setSize(500,500);
        this.setLocation(200, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        /***********TCP协议*************/
        jb.addActionListener(this);  // 这是按钮点击使用， 让当前对象去监听
        // 回车键的监听事件 在接口KeyListener中
        //jtf.addKeyListener(this);

        //给文本框绑定一个键盘绑定事件
        jtf.addKeyListener(new KeyAdapter() {   //键盘输入事件
            public void keyTyped(KeyEvent e) {
                //sout（e）观察其内容
                if((char)e.getKeyChar()==KeyEvent.VK_ENTER) {
                    useVoid();
                }
            }
        });

        try{
            // 1.创建一个服务端的套接字
            ServerSocket serverSocket = new ServerSocket(8888);
            //2.等待客户端的连接
            Socket socket = serverSocket.accept();
            // 3.获取socket通道的输入流(输入流的读取方式为一行一行的读取方式 ----> readLine())
            // InputStream in = socket.getInputStream();

            //字符缓冲(字符流(套接字接收数据))
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 4.获取通道的输入流(也是一行一行的写出  BufferedWriter ->newLine())

            // 当用户点击“发送”按钮的时候才会，写出数据
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //循环读取数据，并拼接到文本域中
            String line = null;
            while((line = br.readLine())!=null){
                // 将读取的数据拼接到文本域中显示
                jta.append(line + "\n");
            }
            // 5.关闭socket通道
            serverSocket.close();

        }catch(IOException e){
            e.printStackTrace();
        }
        /************************/
    }

    // 点击按钮所实现的方法，获取，发送
    public void actionPerformed(ActionEvent e){
        //按钮，用来获取文本内容，然后发送
        useVoid();
    }

    //sendDataToSocket()
    public void useVoid(){
        // 1.获取文本框中的内容
        String text = jtf.getText();

        text = "同学2:" + text;
        // 自己显示
        jta.append(text + "\n");

        // 2.发送
        try{
            // 4.发送，用bufferwrite去发，所以要将，局部变量变成成员变量
            bw.write(text);
            bw.newLine(); // 换行
            bw.flush();  // 刷新
            // 5.清空文本框
            jtf.setText("");
        }catch (IOException e1){
            e1.printStackTrace();
        }
    }

	/*public void KeyPressed(KeyEvent e){
		//回车键
		System.out.println("按钮数字");
	}

	public void KeyTyped(KeyEvent e){
	}

	public void KeyReleased(KeyEvent e){
	}*/
    //行为
}

